package hu.bme.mit.androtext.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import hu.bme.mit.androtext.services.AndroDataLangGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalAndroDataLangParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'modelID'", "'entity'", "'extends'", "'{'", "'}'", "'property'", "':'", "'*'", "'String'", "'float'", "'boolean'", "'int'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=6;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalAndroDataLangParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g"; }



     	private AndroDataLangGrammarAccess grammarAccess;
     	
        public InternalAndroDataLangParser(TokenStream input, IAstFactory factory, AndroDataLangGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AndroDataRoot";	
       	}
       	
       	@Override
       	protected AndroDataLangGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleAndroDataRoot
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:78:1: entryRuleAndroDataRoot returns [EObject current=null] : iv_ruleAndroDataRoot= ruleAndroDataRoot EOF ;
    public final EObject entryRuleAndroDataRoot() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleAndroDataRoot = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:79:2: (iv_ruleAndroDataRoot= ruleAndroDataRoot EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:80:2: iv_ruleAndroDataRoot= ruleAndroDataRoot EOF
            {
             currentNode = createCompositeNode(grammarAccess.getAndroDataRootRule(), currentNode); 
            pushFollow(FOLLOW_ruleAndroDataRoot_in_entryRuleAndroDataRoot75);
            iv_ruleAndroDataRoot=ruleAndroDataRoot();
            _fsp--;

             current =iv_ruleAndroDataRoot; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleAndroDataRoot85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleAndroDataRoot


    // $ANTLR start ruleAndroDataRoot
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:87:1: ruleAndroDataRoot returns [EObject current=null] : ( 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* ) ;
    public final EObject ruleAndroDataRoot() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_types_2_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:92:6: ( ( 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:93:1: ( 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:93:1: ( 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )* )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:93:3: 'modelID' ( (lv_name_1_0= RULE_ID ) ) ( (lv_types_2_0= ruleType ) )*
            {
            match(input,11,FOLLOW_11_in_ruleAndroDataRoot120); 

                    createLeafNode(grammarAccess.getAndroDataRootAccess().getModelIDKeyword_0(), null); 
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:97:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:98:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:98:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:99:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleAndroDataRoot137); 

            			createLeafNode(grammarAccess.getAndroDataRootAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getAndroDataRootRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:121:2: ( (lv_types_2_0= ruleType ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==12) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:122:1: (lv_types_2_0= ruleType )
            	    {
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:122:1: (lv_types_2_0= ruleType )
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:123:3: lv_types_2_0= ruleType
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getAndroDataRootAccess().getTypesTypeParserRuleCall_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleType_in_ruleAndroDataRoot163);
            	    lv_types_2_0=ruleType();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getAndroDataRootRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"types",
            	    	        		lv_types_2_0, 
            	    	        		"Type", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleAndroDataRoot


    // $ANTLR start entryRuleType
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:153:1: entryRuleType returns [EObject current=null] : iv_ruleType= ruleType EOF ;
    public final EObject entryRuleType() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleType = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:154:2: (iv_ruleType= ruleType EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:155:2: iv_ruleType= ruleType EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTypeRule(), currentNode); 
            pushFollow(FOLLOW_ruleType_in_entryRuleType200);
            iv_ruleType=ruleType();
            _fsp--;

             current =iv_ruleType; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleType210); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleType


    // $ANTLR start ruleType
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:162:1: ruleType returns [EObject current=null] : this_Entity_0= ruleEntity ;
    public final EObject ruleType() throws RecognitionException {
        EObject current = null;

        EObject this_Entity_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:167:6: (this_Entity_0= ruleEntity )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:169:5: this_Entity_0= ruleEntity
            {
             
                    currentNode=createCompositeNode(grammarAccess.getTypeAccess().getEntityParserRuleCall(), currentNode); 
                
            pushFollow(FOLLOW_ruleEntity_in_ruleType256);
            this_Entity_0=ruleEntity();
            _fsp--;

             
                    current = this_Entity_0; 
                    currentNode = currentNode.getParent();
                

            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleType


    // $ANTLR start entryRuleEntity
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:185:1: entryRuleEntity returns [EObject current=null] : iv_ruleEntity= ruleEntity EOF ;
    public final EObject entryRuleEntity() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntity = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:186:2: (iv_ruleEntity= ruleEntity EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:187:2: iv_ruleEntity= ruleEntity EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEntityRule(), currentNode); 
            pushFollow(FOLLOW_ruleEntity_in_entryRuleEntity290);
            iv_ruleEntity=ruleEntity();
            _fsp--;

             current =iv_ruleEntity; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEntity300); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEntity


    // $ANTLR start ruleEntity
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:194:1: ruleEntity returns [EObject current=null] : ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( RULE_ID ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' ) ;
    public final EObject ruleEntity() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_features_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:199:6: ( ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( RULE_ID ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:200:1: ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( RULE_ID ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:200:1: ( 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( RULE_ID ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}' )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:200:3: 'entity' ( (lv_name_1_0= RULE_ID ) ) ( 'extends' ( ( RULE_ID ) ) )? '{' ( (lv_features_5_0= ruleFeature ) )* '}'
            {
            match(input,12,FOLLOW_12_in_ruleEntity335); 

                    createLeafNode(grammarAccess.getEntityAccess().getEntityKeyword_0(), null); 
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:204:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:205:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:205:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:206:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntity352); 

            			createLeafNode(grammarAccess.getEntityAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:228:2: ( 'extends' ( ( RULE_ID ) ) )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==13) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:228:4: 'extends' ( ( RULE_ID ) )
                    {
                    match(input,13,FOLLOW_13_in_ruleEntity368); 

                            createLeafNode(grammarAccess.getEntityAccess().getExtendsKeyword_2_0(), null); 
                        
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:232:1: ( ( RULE_ID ) )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:233:1: ( RULE_ID )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:233:1: ( RULE_ID )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:234:3: RULE_ID
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                    match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntity386); 

                    		createLeafNode(grammarAccess.getEntityAccess().getSuperTypeEntityCrossReference_2_1_0(), "superType"); 
                    	

                    }


                    }


                    }
                    break;

            }

            match(input,14,FOLLOW_14_in_ruleEntity398); 

                    createLeafNode(grammarAccess.getEntityAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:250:1: ( (lv_features_5_0= ruleFeature ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==16) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:251:1: (lv_features_5_0= ruleFeature )
            	    {
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:251:1: (lv_features_5_0= ruleFeature )
            	    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:252:3: lv_features_5_0= ruleFeature
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEntityAccess().getFeaturesFeatureParserRuleCall_4_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleFeature_in_ruleEntity419);
            	    lv_features_5_0=ruleFeature();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEntityRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"features",
            	    	        		lv_features_5_0, 
            	    	        		"Feature", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleEntity430); 

                    createLeafNode(grammarAccess.getEntityAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEntity


    // $ANTLR start entryRuleFeature
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:286:1: entryRuleFeature returns [EObject current=null] : iv_ruleFeature= ruleFeature EOF ;
    public final EObject entryRuleFeature() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFeature = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:287:2: (iv_ruleFeature= ruleFeature EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:288:2: iv_ruleFeature= ruleFeature EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFeatureRule(), currentNode); 
            pushFollow(FOLLOW_ruleFeature_in_entryRuleFeature466);
            iv_ruleFeature=ruleFeature();
            _fsp--;

             current =iv_ruleFeature; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleFeature476); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFeature


    // $ANTLR start ruleFeature
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:295:1: ruleFeature returns [EObject current=null] : ( 'property' ( (lv_name_1_0= RULE_ID ) ) ':' ( (lv_type_3_0= ruleTypeRef ) ) ) ;
    public final EObject ruleFeature() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        EObject lv_type_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:300:6: ( ( 'property' ( (lv_name_1_0= RULE_ID ) ) ':' ( (lv_type_3_0= ruleTypeRef ) ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:301:1: ( 'property' ( (lv_name_1_0= RULE_ID ) ) ':' ( (lv_type_3_0= ruleTypeRef ) ) )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:301:1: ( 'property' ( (lv_name_1_0= RULE_ID ) ) ':' ( (lv_type_3_0= ruleTypeRef ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:301:3: 'property' ( (lv_name_1_0= RULE_ID ) ) ':' ( (lv_type_3_0= ruleTypeRef ) )
            {
            match(input,16,FOLLOW_16_in_ruleFeature511); 

                    createLeafNode(grammarAccess.getFeatureAccess().getPropertyKeyword_0(), null); 
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:305:1: ( (lv_name_1_0= RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:306:1: (lv_name_1_0= RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:306:1: (lv_name_1_0= RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:307:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeature528); 

            			createLeafNode(grammarAccess.getFeatureAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getFeatureRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,17,FOLLOW_17_in_ruleFeature543); 

                    createLeafNode(grammarAccess.getFeatureAccess().getColonKeyword_2(), null); 
                
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:333:1: ( (lv_type_3_0= ruleTypeRef ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:334:1: (lv_type_3_0= ruleTypeRef )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:334:1: (lv_type_3_0= ruleTypeRef )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:335:3: lv_type_3_0= ruleTypeRef
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getFeatureAccess().getTypeTypeRefParserRuleCall_3_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleTypeRef_in_ruleFeature564);
            lv_type_3_0=ruleTypeRef();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getFeatureRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"type",
            	        		lv_type_3_0, 
            	        		"TypeRef", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFeature


    // $ANTLR start entryRuleTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:365:1: entryRuleTypeRef returns [EObject current=null] : iv_ruleTypeRef= ruleTypeRef EOF ;
    public final EObject entryRuleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:366:2: (iv_ruleTypeRef= ruleTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:367:2: iv_ruleTypeRef= ruleTypeRef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getTypeRefRule(), currentNode); 
            pushFollow(FOLLOW_ruleTypeRef_in_entryRuleTypeRef600);
            iv_ruleTypeRef=ruleTypeRef();
            _fsp--;

             current =iv_ruleTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTypeRef610); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleTypeRef


    // $ANTLR start ruleTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:374:1: ruleTypeRef returns [EObject current=null] : (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef ) ;
    public final EObject ruleTypeRef() throws RecognitionException {
        EObject current = null;

        EObject this_EntityTypeRef_0 = null;

        EObject this_DataTypeRef_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:379:6: ( (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:380:1: (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:380:1: (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==RULE_ID) ) {
                alt4=1;
            }
            else if ( ((LA4_0>=19 && LA4_0<=22)) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("380:1: (this_EntityTypeRef_0= ruleEntityTypeRef | this_DataTypeRef_1= ruleDataTypeRef )", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:381:5: this_EntityTypeRef_0= ruleEntityTypeRef
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTypeRefAccess().getEntityTypeRefParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleEntityTypeRef_in_ruleTypeRef657);
                    this_EntityTypeRef_0=ruleEntityTypeRef();
                    _fsp--;

                     
                            current = this_EntityTypeRef_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:391:5: this_DataTypeRef_1= ruleDataTypeRef
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getTypeRefAccess().getDataTypeRefParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FOLLOW_ruleDataTypeRef_in_ruleTypeRef684);
                    this_DataTypeRef_1=ruleDataTypeRef();
                    _fsp--;

                     
                            current = this_DataTypeRef_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleTypeRef


    // $ANTLR start entryRuleEntityTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:407:1: entryRuleEntityTypeRef returns [EObject current=null] : iv_ruleEntityTypeRef= ruleEntityTypeRef EOF ;
    public final EObject entryRuleEntityTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEntityTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:408:2: (iv_ruleEntityTypeRef= ruleEntityTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:409:2: iv_ruleEntityTypeRef= ruleEntityTypeRef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEntityTypeRefRule(), currentNode); 
            pushFollow(FOLLOW_ruleEntityTypeRef_in_entryRuleEntityTypeRef719);
            iv_ruleEntityTypeRef=ruleEntityTypeRef();
            _fsp--;

             current =iv_ruleEntityTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleEntityTypeRef729); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEntityTypeRef


    // $ANTLR start ruleEntityTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:416:1: ruleEntityTypeRef returns [EObject current=null] : ( ( ( RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? ) ;
    public final EObject ruleEntityTypeRef() throws RecognitionException {
        EObject current = null;

        Token lv_multi_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:421:6: ( ( ( ( RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:422:1: ( ( ( RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:422:1: ( ( ( RULE_ID ) ) ( (lv_multi_1_0= '*' ) )? )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:422:2: ( ( RULE_ID ) ) ( (lv_multi_1_0= '*' ) )?
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:422:2: ( ( RULE_ID ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:423:1: ( RULE_ID )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:423:1: ( RULE_ID )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:424:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getEntityTypeRefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEntityTypeRef772); 

            		createLeafNode(grammarAccess.getEntityTypeRefAccess().getReferencedEntityCrossReference_0_0(), "referenced"); 
            	

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:436:2: ( (lv_multi_1_0= '*' ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==18) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:437:1: (lv_multi_1_0= '*' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:437:1: (lv_multi_1_0= '*' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:438:3: lv_multi_1_0= '*'
                    {
                    lv_multi_1_0=(Token)input.LT(1);
                    match(input,18,FOLLOW_18_in_ruleEntityTypeRef790); 

                            createLeafNode(grammarAccess.getEntityTypeRefAccess().getMultiAsteriskKeyword_1_0(), "multi"); 
                        

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEntityTypeRefRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        
                    	        try {
                    	       		set(current, "multi", true, "*", lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEntityTypeRef


    // $ANTLR start entryRuleDataTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:465:1: entryRuleDataTypeRef returns [EObject current=null] : iv_ruleDataTypeRef= ruleDataTypeRef EOF ;
    public final EObject entryRuleDataTypeRef() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDataTypeRef = null;


        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:466:2: (iv_ruleDataTypeRef= ruleDataTypeRef EOF )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:467:2: iv_ruleDataTypeRef= ruleDataTypeRef EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDataTypeRefRule(), currentNode); 
            pushFollow(FOLLOW_ruleDataTypeRef_in_entryRuleDataTypeRef840);
            iv_ruleDataTypeRef=ruleDataTypeRef();
            _fsp--;

             current =iv_ruleDataTypeRef; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDataTypeRef850); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDataTypeRef


    // $ANTLR start ruleDataTypeRef
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:474:1: ruleDataTypeRef returns [EObject current=null] : ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? ) ;
    public final EObject ruleDataTypeRef() throws RecognitionException {
        EObject current = null;

        Token lv_multi_1_0=null;
        Enumerator lv_referencedDataType_0_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:479:6: ( ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:480:1: ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:480:1: ( ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )? )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:480:2: ( (lv_referencedDataType_0_0= ruleDataTypes ) ) ( (lv_multi_1_0= '*' ) )?
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:480:2: ( (lv_referencedDataType_0_0= ruleDataTypes ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:481:1: (lv_referencedDataType_0_0= ruleDataTypes )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:481:1: (lv_referencedDataType_0_0= ruleDataTypes )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:482:3: lv_referencedDataType_0_0= ruleDataTypes
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getDataTypeRefAccess().getReferencedDataTypeDataTypesEnumRuleCall_0_0(), currentNode); 
            	    
            pushFollow(FOLLOW_ruleDataTypes_in_ruleDataTypeRef896);
            lv_referencedDataType_0_0=ruleDataTypes();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getDataTypeRefRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"referencedDataType",
            	        		lv_referencedDataType_0_0, 
            	        		"DataTypes", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:504:2: ( (lv_multi_1_0= '*' ) )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==18) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:505:1: (lv_multi_1_0= '*' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:505:1: (lv_multi_1_0= '*' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:506:3: lv_multi_1_0= '*'
                    {
                    lv_multi_1_0=(Token)input.LT(1);
                    match(input,18,FOLLOW_18_in_ruleDataTypeRef914); 

                            createLeafNode(grammarAccess.getDataTypeRefAccess().getMultiAsteriskKeyword_1_0(), "multi"); 
                        

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDataTypeRefRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        
                    	        try {
                    	       		set(current, "multi", true, "*", lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDataTypeRef


    // $ANTLR start ruleDataTypes
    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:533:1: ruleDataTypes returns [Enumerator current=null] : ( ( 'String' ) | ( 'float' ) | ( 'boolean' ) | ( 'int' ) ) ;
    public final Enumerator ruleDataTypes() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:537:6: ( ( ( 'String' ) | ( 'float' ) | ( 'boolean' ) | ( 'int' ) ) )
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:538:1: ( ( 'String' ) | ( 'float' ) | ( 'boolean' ) | ( 'int' ) )
            {
            // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:538:1: ( ( 'String' ) | ( 'float' ) | ( 'boolean' ) | ( 'int' ) )
            int alt7=4;
            switch ( input.LA(1) ) {
            case 19:
                {
                alt7=1;
                }
                break;
            case 20:
                {
                alt7=2;
                }
                break;
            case 21:
                {
                alt7=3;
                }
                break;
            case 22:
                {
                alt7=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("538:1: ( ( 'String' ) | ( 'float' ) | ( 'boolean' ) | ( 'int' ) )", 7, 0, input);

                throw nvae;
            }

            switch (alt7) {
                case 1 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:538:2: ( 'String' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:538:2: ( 'String' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:538:4: 'String'
                    {
                    match(input,19,FOLLOW_19_in_ruleDataTypes976); 

                            current = grammarAccess.getDataTypesAccess().getSTRINGEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getDataTypesAccess().getSTRINGEnumLiteralDeclaration_0(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:544:6: ( 'float' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:544:6: ( 'float' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:544:8: 'float'
                    {
                    match(input,20,FOLLOW_20_in_ruleDataTypes991); 

                            current = grammarAccess.getDataTypesAccess().getFLOATEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getDataTypesAccess().getFLOATEnumLiteralDeclaration_1(), null); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:550:6: ( 'boolean' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:550:6: ( 'boolean' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:550:8: 'boolean'
                    {
                    match(input,21,FOLLOW_21_in_ruleDataTypes1006); 

                            current = grammarAccess.getDataTypesAccess().getBOOLEANEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getDataTypesAccess().getBOOLEANEnumLiteralDeclaration_2(), null); 
                        

                    }


                    }
                    break;
                case 4 :
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:556:6: ( 'int' )
                    {
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:556:6: ( 'int' )
                    // ../hu.bme.mit.androtext.data/src-gen/hu/bme/mit/androtext/parser/antlr/internal/InternalAndroDataLang.g:556:8: 'int'
                    {
                    match(input,22,FOLLOW_22_in_ruleDataTypes1021); 

                            current = grammarAccess.getDataTypesAccess().getINTEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
                            createLeafNode(grammarAccess.getDataTypesAccess().getINTEnumLiteralDeclaration_3(), null); 
                        

                    }


                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDataTypes


 

    public static final BitSet FOLLOW_ruleAndroDataRoot_in_entryRuleAndroDataRoot75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAndroDataRoot85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleAndroDataRoot120 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleAndroDataRoot137 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleType_in_ruleAndroDataRoot163 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleType_in_entryRuleType200 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleType210 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_ruleType256 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntity_in_entryRuleEntity290 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEntity300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_12_in_ruleEntity335 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntity352 = new BitSet(new long[]{0x0000000000006000L});
    public static final BitSet FOLLOW_13_in_ruleEntity368 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntity386 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleEntity398 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_ruleFeature_in_ruleEntity419 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleEntity430 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleFeature_in_entryRuleFeature466 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleFeature476 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleFeature511 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleFeature528 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleFeature543 = new BitSet(new long[]{0x0000000000780010L});
    public static final BitSet FOLLOW_ruleTypeRef_in_ruleFeature564 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTypeRef_in_entryRuleTypeRef600 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTypeRef610 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntityTypeRef_in_ruleTypeRef657 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypeRef_in_ruleTypeRef684 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleEntityTypeRef_in_entryRuleEntityTypeRef719 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleEntityTypeRef729 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleEntityTypeRef772 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleEntityTypeRef790 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypeRef_in_entryRuleDataTypeRef840 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDataTypeRef850 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleDataTypes_in_ruleDataTypeRef896 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleDataTypeRef914 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleDataTypes976 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleDataTypes991 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_21_in_ruleDataTypes1006 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleDataTypes1021 = new BitSet(new long[]{0x0000000000000002L});

}